/*

 Supersized - Fullscreen Slideshow jQuery Plugin
 Version : 3.2.7
 Site	: www.buildinternet.com/project/supersized

 Author	: Sam Dunn
 Company : One Mighty Roar (www.onemightyroar.com)
 License : MIT License / GPL License

 */

(function($){

    /* Place Supersized Elements
     ----------------------------*/
    $(document).ready(function() {
        $('body').append('<div id="supersized-loader"></div><ul id="supersized"></ul>');
    });


    $.supersized = function(options){

        /* Variables
         ----------------------------*/
        var el = '#supersized',
            base = this;
        // Access to jQuery and DOM versions of element
        base.$el = $(el);
        base.el = el;
        vars = $.supersized.vars;
        // Add a reverse reference to the DOM object
        base.$el.data("supersized", base);
        api = base.$el.data('supersized');

        base.init = function(){
            // Combine options and vars
            $.supersized.vars = $.extend($.supersized.vars, $.supersized.themeVars);
            $.supersized.vars.options = $.extend({},$.supersized.defaultOptions, $.supersized.themeOptions, options);
            base.options = $.supersized.vars.options;

            base._build();
        };


        /* Build Elements
         ----------------------------*/
        base._build = function(){
            // Add in slide markers
            var thisSlide = 0,
                slideSet = '',
                markers = '',
                markerContent,
                thumbMarkers = '',
                thumbImage;

            while(thisSlide <= base.options.slides.length-1){
                //Determine slide link content
                switch(base.options.slide_links){
                    case 'num':
                        markerContent = thisSlide;
                        break;
                    case 'name':
                        markerContent = base.options.slides[thisSlide].title;
                        break;
                    case 'blank':
                        markerContent = '';
                        break;
                }

                slideSet = slideSet+'<li class="slide-'+thisSlide+'"></li>';

                if(thisSlide == base.options.start_slide-1){
                    // Slide links
                    if (base.options.slide_links)markers = markers+'<li class="slide-link-'+thisSlide+' current-slide"><a>'+markerContent+'</a></li>';
                    // Slide Thumbnail Links
                    if (base.options.thumb_links){
                        base.options.slides[thisSlide].thumb ? thumbImage = base.options.slides[thisSlide].thumb : thumbImage = base.options.slides[thisSlide].image;
                        thumbMarkers = thumbMarkers+'<li class="thumb'+thisSlide+' current-thumb"><img src="'+thumbImage+'"/></li>';
                    };
                }else{
                    // Slide links
                    if (base.options.slide_links) markers = markers+'<li class="slide-link-'+thisSlide+'" ><a>'+markerContent+'</a></li>';
                    // Slide Thumbnail Links
                    if (base.options.thumb_links){
                        base.options.slides[thisSlide].thumb ? thumbImage = base.options.slides[thisSlide].thumb : thumbImage = base.options.slides[thisSlide].image;
                        thumbMarkers = thumbMarkers+'<li class="thumb'+thisSlide+'"><img src="'+thumbImage+'"/></li>';
                    };
                }
                thisSlide++;
            }

            if (base.options.slide_links) $(vars.slide_list).html(markers);
            if (base.options.thumb_links && vars.thumb_tray.length){
                $(vars.thumb_tray).append('<ul id="'+vars.thumb_list.replace('#','')+'">'+thumbMarkers+'</ul>');
            }

            $(base.el).append(slideSet);

            // Add in thumbnails
            if (base.options.thumbnail_navigation){
                // Load previous thumbnail
                vars.current_slide - 1 < 0  ? prevThumb = base.options.slides.length - 1 : prevThumb = vars.current_slide - 1;
                $(vars.prev_thumb).show().html($("<img/>").attr("src", base.options.slides[prevThumb].image));

                // Load next thumbnail
                vars.current_slide == base.options.slides.length - 1 ? nextThumb = 0 : nextThumb = vars.current_slide + 1;
                $(vars.next_thumb).show().html($("<img/>").attr("src", base.options.slides[nextThumb].image));
            }

            base._start(); // Get things started
        };


        /* Initialize
         ----------------------------*/
        base._start = function(){

            // Determine if starting slide random
            if (base.options.start_slide){
                vars.current_slide = base.options.start_slide - 1;
            }else{
                vars.current_slide = Math.floor(Math.random()*base.options.slides.length);	// Generate random slide number
            }

            // If links should open in new window
            var linkTarget = base.options.new_window ? ' target="_blank"' : '';

            // Set slideshow quality (Supported only in FF and IE, no Webkit)
            if (base.options.performance == 3){
                base.$el.addClass('speed'); 		// Faster transitions
            } else if ((base.options.performance == 1) || (base.options.performance == 2)){
                base.$el.addClass('quality');	// Higher image quality
            }

            // Shuffle slide order if needed
            if (base.options.random){
                arr = base.options.slides;
                for(var j, x, i = arr.length; i; j = parseInt(Math.random() * i), x = arr[--i], arr[i] = arr[j], arr[j] = x);	// Fisher-Yates shuffle algorithm (jsfromhell.com/array/shuffle)
                base.options.slides = arr;
            }

            /*-----Load initial set of images-----*/

            if (base.options.slides.length > 1){
                if(base.options.slides.length > 2){
                    // Set previous image
                    vars.current_slide - 1 < 0  ? loadPrev = base.options.slides.length - 1 : loadPrev = vars.current_slide - 1;	// If slide is 1, load last slide as previous
                    var imageLink = (base.options.slides[loadPrev].url) ? "href='" + base.options.slides[loadPrev].url + "'" : "";

                    var imgPrev = $('<img src="'+base.options.slides[loadPrev].image+'"/>');
                    var slidePrev = base.el+' li:eq('+loadPrev+')';
                    imgPrev.appendTo(slidePrev).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading prevslide');

                    imgPrev.load(function(){
                        $(this).data('origWidth', $(this).width()).data('origHeight', $(this).height());
                        base.resizeNow();	// Resize background image
                    });	// End Load
                }
            } else {
                // Slideshow turned off if there is only one slide
                base.options.slideshow = 0;
            }

            // Set current image
            imageLink = (api.getField('url')) ? "href='" + api.getField('url') + "'" : "";
            var img = $('<img src="'+api.getField('image')+'"/>');

            var slideCurrent= base.el+' li:eq('+vars.current_slide+')';
            img.appendTo(slideCurrent).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading activeslide');

            img.load(function(){
                base._origDim($(this));
                base.resizeNow();	// Resize background image
                base.launch();
                if( typeof theme != 'undefined' && typeof theme._init == "function" ) theme._init();	// Load Theme
            });

            if (base.options.slides.length > 1){
                // Set next image
                vars.current_slide == base.options.slides.length - 1 ? loadNext = 0 : loadNext = vars.current_slide + 1;	// If slide is last, load first slide as next
                imageLink = (base.options.slides[loadNext].url) ? "href='" + base.options.slides[loadNext].url + "'" : "";

                var imgNext = $('<img src="'+base.options.slides[loadNext].image+'"/>');
                var slideNext = base.el+' li:eq('+loadNext+')';
                imgNext.appendTo(slideNext).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading');

                imgNext.load(function(){
                    $(this).data('origWidth', $(this).width()).data('origHeight', $(this).height());
                    base.resizeNow();	// Resize background image
                });	// End Load
            }
            /*-----End load initial images-----*/

            //  Hide elements to be faded in
            base.$el.css('visibility','hidden');
            $('.load-item').hide();

        };


        /* Launch Supersized
         ----------------------------*/
        base.launch = function(){

            base.$el.css('visibility','visible');
            $('#supersized-loader').remove();		//Hide loading animation

            // Call theme function for before slide transition
            if( typeof theme != 'undefined' && typeof theme.beforeAnimation == "function" ) theme.beforeAnimation('next');
            $('.load-item').show();

            // Keyboard Navigation
            if (base.options.keyboard_nav){
                $(document.documentElement).keyup(function (event) {

                    if(vars.in_animation) return false;		// Abort if currently animating

                    // Left Arrow or Down Arrow
                    if ((event.keyCode == 37) || (event.keyCode == 40)) {
                        clearInterval(vars.slideshow_interval);	// Stop slideshow, prevent buildup
                        base.prevSlide();

                        // Right Arrow or Up Arrow
                    } else if ((event.keyCode == 39) || (event.keyCode == 38)) {
                        clearInterval(vars.slideshow_interval);	// Stop slideshow, prevent buildup
                        base.nextSlide();

                        // Spacebar
                    } else if (event.keyCode == 32 && !vars.hover_pause) {
                        clearInterval(vars.slideshow_interval);	// Stop slideshow, prevent buildup
                        base.playToggle();
                    }

                });
            }

            // Pause when hover on image
            if (base.options.slideshow && base.options.pause_hover){
                $(base.el).hover(function() {
                    if(vars.in_animation) return false;		// Abort if currently animating
                    vars.hover_pause = true;	// Mark slideshow paused from hover
                    if(!vars.is_paused){
                        vars.hover_pause = 'resume';	// It needs to resume afterwards
                        base.playToggle();
                    }
                }, function() {
                    if(vars.hover_pause == 'resume'){
                        base.playToggle();
                        vars.hover_pause = false;
                    }
                });
            }

            if (base.options.slide_links){
                // Slide marker clicked
                $(vars.slide_list+'> li').click(function(){

                    index = $(vars.slide_list+'> li').index(this);
                    targetSlide = index + 1;

                    base.goTo(targetSlide);
                    return false;

                });
            }

            // Thumb marker clicked
            if (base.options.thumb_links){
                $(vars.thumb_list+'> li').click(function(){

                    index = $(vars.thumb_list+'> li').index(this);
                    targetSlide = index + 1;

                    api.goTo(targetSlide);
                    return false;

                });
            }

            // Start slideshow if enabled
            if (base.options.slideshow && base.options.slides.length > 1){

                // Start slideshow if autoplay enabled
                if (base.options.autoplay && base.options.slides.length > 1){
                    vars.slideshow_interval = setInterval(base.nextSlide, base.options.slide_interval);	// Initiate slide interval
                }else{
                    vars.is_paused = true;	// Mark as paused
                }

                //Prevent navigation items from being dragged
                $('.load-item img').bind("contextmenu mousedown",function(){
                    return false;
                });

            }

            // Adjust image when browser is resized
            $(window).resize(function(){
                base.resizeNow();
            });

        };


        /* Resize Images
         ----------------------------*/
        base.resizeNow = function(){

            return base.$el.each(function() {
                //  Resize each image seperately
                $('img', base.el).each(function(){

                    thisSlide = $(this);
                    var ratio = (thisSlide.data('origHeight')/thisSlide.data('origWidth')).toFixed(2);	// Define image ratio

                    // Gather browser size
                    var browserwidth = base.$el.width(),
                        browserheight = base.$el.height(),
                        offset;

                    /*-----Resize Image-----*/
                    if (base.options.fit_always){	// Fit always is enabled
                        if ((browserheight/browserwidth) > ratio){
                            resizeWidth();
                        } else {
                            resizeHeight();
                        }
                    }else{	// Normal Resize
                        if ((browserheight <= base.options.min_height) && (browserwidth <= base.options.min_width)){	// If window smaller than minimum width and height

                            if ((browserheight/browserwidth) > ratio){
                                base.options.fit_landscape && ratio < 1 ? resizeWidth(true) : resizeHeight(true);	// If landscapes are set to fit
                            } else {
                                base.options.fit_portrait && ratio >= 1 ? resizeHeight(true) : resizeWidth(true);		// If portraits are set to fit
                            }

                        } else if (browserwidth <= base.options.min_width){		// If window only smaller than minimum width

                            if ((browserheight/browserwidth) > ratio){
                                base.options.fit_landscape && ratio < 1 ? resizeWidth(true) : resizeHeight();	// If landscapes are set to fit
                            } else {
                                base.options.fit_portrait && ratio >= 1 ? resizeHeight() : resizeWidth(true);		// If portraits are set to fit
                            }

                        } else if (browserheight <= base.options.min_height){	// If window only smaller than minimum height

                            if ((browserheight/browserwidth) > ratio){
                                base.options.fit_landscape && ratio < 1 ? resizeWidth() : resizeHeight(true);	// If landscapes are set to fit
                            } else {
                                base.options.fit_portrait && ratio >= 1 ? resizeHeight(true) : resizeWidth();		// If portraits are set to fit
                            }

                        } else {	// If larger than minimums

                            if ((browserheight/browserwidth) > ratio){
                                base.options.fit_landscape && ratio < 1 ? resizeWidth() : resizeHeight();	// If landscapes are set to fit
                            } else {
                                base.options.fit_portrait && ratio >= 1 ? resizeHeight() : resizeWidth();		// If portraits are set to fit
                            }

                        }
                    }
                    /*-----End Image Resize-----*/


                    /*-----Resize Functions-----*/

                    function resizeWidth(minimum){
                        if (minimum){	// If minimum height needs to be considered
                            if(thisSlide.width() < browserwidth || thisSlide.width() < base.options.min_width ){
                                if (thisSlide.width() * ratio >= base.options.min_height){
                                    thisSlide.width(base.options.min_width);
                                    thisSlide.height(thisSlide.width() * ratio);
                                }else{
                                    resizeHeight();
                                }
                            }
                        }else{
                            if (base.options.min_height >= browserheight && !base.options.fit_landscape){	// If minimum height needs to be considered
                                if (browserwidth * ratio >= base.options.min_height || (browserwidth * ratio >= base.options.min_height && ratio <= 1)){	// If resizing would push below minimum height or image is a landscape
                                    thisSlide.width(browserwidth);
                                    thisSlide.height(browserwidth * ratio);
                                } else if (ratio > 1){		// Else the image is portrait
                                    thisSlide.height(base.options.min_height);
                                    thisSlide.width(thisSlide.height() / ratio);
                                } else if (thisSlide.width() < browserwidth) {
                                    thisSlide.width(browserwidth);
                                    thisSlide.height(thisSlide.width() * ratio);
                                }
                            }else{	// Otherwise, resize as normal
                                thisSlide.width(browserwidth);
                                thisSlide.height(browserwidth * ratio);
                            }
                        }
                    };

                    function resizeHeight(minimum){
                        if (minimum){	// If minimum height needs to be considered
                            if(thisSlide.height() < browserheight){
                                if (thisSlide.height() / ratio >= base.options.min_width){
                                    thisSlide.height(base.options.min_height);
                                    thisSlide.width(thisSlide.height() / ratio);
                                }else{
                                    resizeWidth(true);
                                }
                            }
                        }else{	// Otherwise, resized as normal
                            if (base.options.min_width >= browserwidth){	// If minimum width needs to be considered
                                if (browserheight / ratio >= base.options.min_width || ratio > 1){	// If resizing would push below minimum width or image is a portrait
                                    thisSlide.height(browserheight);
                                    thisSlide.width(browserheight / ratio);
                                } else if (ratio <= 1){		// Else the image is landscape
                                    thisSlide.width(base.options.min_width);
                                    thisSlide.height(thisSlide.width() * ratio);
                                }
                            }else{	// Otherwise, resize as normal
                                thisSlide.height(browserheight);
                                thisSlide.width(browserheight / ratio);
                            }
                        }
                    };

                    /*-----End Resize Functions-----*/

                    if (thisSlide.parents('li').hasClass('image-loading')){
                        $('.image-loading').removeClass('image-loading');
                    }

                    // Horizontally Center
                    if (base.options.horizontal_center){
                        $(this).css('left', (browserwidth - $(this).width())/2);
                    }

                    // Vertically Center
                    if (base.options.vertical_center){
                        $(this).css('top', (browserheight - $(this).height())/2);
                    }

                });

                // Basic image drag and right click protection
                if (base.options.image_protect){

                    $('img', base.el).bind("contextmenu mousedown",function(){
                        return false;
                    });

                }

                return false;

            });

        };


        /* Next Slide
         ----------------------------*/
        base.nextSlide = function(){

            if(vars.in_animation || !api.options.slideshow) return false;		// Abort if currently animating
            else vars.in_animation = true;		// Otherwise set animation marker

            clearInterval(vars.slideshow_interval);	// Stop slideshow

            var slides = base.options.slides,					// Pull in slides array
                liveslide = base.$el.find('.activeslide');		// Find active slide
            $('.prevslide').removeClass('prevslide');
            liveslide.removeClass('activeslide').addClass('prevslide');	// Remove active class & update previous slide

            // Get the slide number of new slide
            vars.current_slide + 1 == base.options.slides.length ? vars.current_slide = 0 : vars.current_slide++;

            var nextslide = $(base.el+' li:eq('+vars.current_slide+')'),
                prevslide = base.$el.find('.prevslide');

            // If hybrid mode is on drop quality for transition
            if (base.options.performance == 1) base.$el.removeClass('quality').addClass('speed');


            /*-----Load Image-----*/

            loadSlide = false;

            vars.current_slide == base.options.slides.length - 1 ? loadSlide = 0 : loadSlide = vars.current_slide + 1;	// Determine next slide

            var targetList = base.el+' li:eq('+loadSlide+')';
            if (!$(targetList).html()){

                // If links should open in new window
                var linkTarget = base.options.new_window ? ' target="_blank"' : '';

                imageLink = (base.options.slides[loadSlide].url) ? "href='" + base.options.slides[loadSlide].url + "'" : "";	// If link exists, build it
                var img = $('<img src="'+base.options.slides[loadSlide].image+'"/>');

                img.appendTo(targetList).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading').css('visibility','hidden');

                img.load(function(){
                    base._origDim($(this));
                    base.resizeNow();
                });	// End Load
            };

            // Update thumbnails (if enabled)
            if (base.options.thumbnail_navigation == 1){

                // Load previous thumbnail
                vars.current_slide - 1 < 0  ? prevThumb = base.options.slides.length - 1 : prevThumb = vars.current_slide - 1;
                $(vars.prev_thumb).html($("<img/>").attr("src", base.options.slides[prevThumb].image));

                // Load next thumbnail
                nextThumb = loadSlide;
                $(vars.next_thumb).html($("<img/>").attr("src", base.options.slides[nextThumb].image));

            }



            /*-----End Load Image-----*/


            // Call theme function for before slide transition
            if( typeof theme != 'undefined' && typeof theme.beforeAnimation == "function" ) theme.beforeAnimation('next');

            //Update slide markers
            if (base.options.slide_links){
                $('.current-slide').removeClass('current-slide');
                $(vars.slide_list +'> li' ).eq(vars.current_slide).addClass('current-slide');
            }

            nextslide.css('visibility','hidden').addClass('activeslide');	// Update active slide

            switch(base.options.transition){
                case 0: case 'none':	// No transition
                nextslide.css('visibility','visible'); vars.in_animation = false; base.afterAnimation();
                break;
                case 1: case 'fade':	// Fade
                nextslide.animate({opacity : 0},0).css('visibility','visible').animate({opacity : 1, avoidTransforms : false}, base.options.transition_speed, function(){ base.afterAnimation(); });
                break;
                case 2: case 'slideTop':	// Slide Top
                nextslide.animate({top : -base.$el.height()}, 0 ).css('visibility','visible').animate({ top:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
                break;
                case 3: case 'slideRight':	// Slide Right
                nextslide.animate({left : base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
                break;
                case 4: case 'slideBottom': // Slide Bottom
                nextslide.animate({top : base.$el.height()}, 0 ).css('visibility','visible').animate({ top:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
                break;
                case 5: case 'slideLeft':  // Slide Left
                nextslide.animate({left : -base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
                break;
                case 6: case 'carouselRight':	// Carousel Right
                nextslide.animate({left : base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
                liveslide.animate({ left: -base.$el.width(), avoidTransforms : false }, base.options.transition_speed );
                break;
                case 7: case 'carouselLeft':   // Carousel Left
                nextslide.animate({left : -base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
                liveslide.animate({ left: base.$el.width(), avoidTransforms : false }, base.options.transition_speed );
                break;
            }
            return false;
        };


        /* Previous Slide
         ----------------------------*/
        base.prevSlide = function(){

            if(vars.in_animation || !api.options.slideshow) return false;		// Abort if currently animating
            else vars.in_animation = true;		// Otherwise set animation marker

            clearInterval(vars.slideshow_interval);	// Stop slideshow

            var slides = base.options.slides,					// Pull in slides array
                liveslide = base.$el.find('.activeslide');		// Find active slide
            $('.prevslide').removeClass('prevslide');
            liveslide.removeClass('activeslide').addClass('prevslide');		// Remove active class & update previous slide

            // Get current slide number
            vars.current_slide == 0 ?  vars.current_slide = base.options.slides.length - 1 : vars.current_slide-- ;

            var nextslide =  $(base.el+' li:eq('+vars.current_slide+')'),
                prevslide =  base.$el.find('.prevslide');

            // If hybrid mode is on drop quality for transition
            if (base.options.performance == 1) base.$el.removeClass('quality').addClass('speed');


            /*-----Load Image-----*/

            loadSlide = vars.current_slide;

            var targetList = base.el+' li:eq('+loadSlide+')';
            if (!$(targetList).html()){
                // If links should open in new window
                var linkTarget = base.options.new_window ? ' target="_blank"' : '';
                imageLink = (base.options.slides[loadSlide].url) ? "href='" + base.options.slides[loadSlide].url + "'" : "";	// If link exists, build it
                var img = $('<img src="'+base.options.slides[loadSlide].image+'"/>');

                img.appendTo(targetList).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading').css('visibility','hidden');

                img.load(function(){
                    base._origDim($(this));
                    base.resizeNow();
                });	// End Load
            };

            // Update thumbnails (if enabled)
            if (base.options.thumbnail_navigation == 1){

                // Load previous thumbnail
                //prevThumb = loadSlide;
                loadSlide == 0 ? prevThumb = base.options.slides.length - 1 : prevThumb = loadSlide - 1;
                $(vars.prev_thumb).html($("<img/>").attr("src", base.options.slides[prevThumb].image));

                // Load next thumbnail
                vars.current_slide == base.options.slides.length - 1 ? nextThumb = 0 : nextThumb = vars.current_slide + 1;
                $(vars.next_thumb).html($("<img/>").attr("src", base.options.slides[nextThumb].image));
            }

            /*-----End Load Image-----*/


            // Call theme function for before slide transition
            if( typeof theme != 'undefined' && typeof theme.beforeAnimation == "function" ) theme.beforeAnimation('prev');

            //Update slide markers
            if (base.options.slide_links){
                $('.current-slide').removeClass('current-slide');
                $(vars.slide_list +'> li' ).eq(vars.current_slide).addClass('current-slide');
            }

            nextslide.css('visibility','hidden').addClass('activeslide');	// Update active slide

            switch(base.options.transition){
                case 0: case 'none':	// No transition
                nextslide.css('visibility','visible'); vars.in_animation = false; base.afterAnimation();
                break;
                case 1: case 'fade':	// Fade
                nextslide.animate({opacity : 0},0).css('visibility','visible').animate({opacity : 1, avoidTransforms : false}, base.options.transition_speed, function(){ base.afterAnimation(); });
                break;
                case 2: case 'slideTop':	// Slide Top (reverse)
                nextslide.animate({top : base.$el.height()}, 0 ).css('visibility','visible').animate({ top:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
                break;
                case 3: case 'slideRight':	// Slide Right (reverse)
                nextslide.animate({left : -base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
                break;
                case 4: case 'slideBottom': // Slide Bottom (reverse)
                nextslide.animate({top : -base.$el.height()}, 0 ).css('visibility','visible').animate({ top:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
                break;
                case 5: case 'slideLeft':  // Slide Left (reverse)
                nextslide.animate({left : base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
                break;
                case 6: case 'carouselRight':	// Carousel Right (reverse)
                nextslide.animate({left : -base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
                liveslide.animate({left : 0}, 0 ).animate({ left: base.$el.width(), avoidTransforms : false}, base.options.transition_speed );
                break;
                case 7: case 'carouselLeft':   // Carousel Left (reverse)
                nextslide.animate({left : base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
                liveslide.animate({left : 0}, 0 ).animate({ left: -base.$el.width(), avoidTransforms : false }, base.options.transition_speed );
                break;
            }
            return false;
        };


        /* Play/Pause Toggle
         ----------------------------*/
        base.playToggle = function(){

            if (vars.in_animation || !api.options.slideshow) return false;		// Abort if currently animating

            if (vars.is_paused){

                vars.is_paused = false;

                // Call theme function for play
                if( typeof theme != 'undefined' && typeof theme.playToggle == "function" ) theme.playToggle('play');

                // Resume slideshow
                vars.slideshow_interval = setInterval(base.nextSlide, base.options.slide_interval);

            }else{

                vars.is_paused = true;

                // Call theme function for pause
                if( typeof theme != 'undefined' && typeof theme.playToggle == "function" ) theme.playToggle('pause');

                // Stop slideshow
                clearInterval(vars.slideshow_interval);

            }

            return false;

        };


        /* Go to specific slide
         ----------------------------*/
        base.goTo = function(targetSlide){
            if (vars.in_animation || !api.options.slideshow) return false;		// Abort if currently animating

            var totalSlides = base.options.slides.length;

            // If target outside range
            if(targetSlide < 0){
                targetSlide = totalSlides;
            }else if(targetSlide > totalSlides){
                targetSlide = 1;
            }
            targetSlide = totalSlides - targetSlide + 1;

            clearInterval(vars.slideshow_interval);	// Stop slideshow, prevent buildup

            // Call theme function for goTo trigger
            if (typeof theme != 'undefined' && typeof theme.goTo == "function" ) theme.goTo();

            if (vars.current_slide == totalSlides - targetSlide){
                if(!(vars.is_paused)){
                    vars.slideshow_interval = setInterval(base.nextSlide, base.options.slide_interval);
                }
                return false;
            }

            // If ahead of current position
            if(totalSlides - targetSlide > vars.current_slide ){

                // Adjust for new next slide
                vars.current_slide = totalSlides-targetSlide-1;
                vars.update_images = 'next';
                base._placeSlide(vars.update_images);

                //Otherwise it's before current position
            }else if(totalSlides - targetSlide < vars.current_slide){

                // Adjust for new prev slide
                vars.current_slide = totalSlides-targetSlide+1;
                vars.update_images = 'prev';
                base._placeSlide(vars.update_images);

            }

            // set active markers
            if (base.options.slide_links){
                $(vars.slide_list +'> .current-slide').removeClass('current-slide');
                $(vars.slide_list +'> li').eq((totalSlides-targetSlide)).addClass('current-slide');
            }

            if (base.options.thumb_links){
                $(vars.thumb_list +'> .current-thumb').removeClass('current-thumb');
                $(vars.thumb_list +'> li').eq((totalSlides-targetSlide)).addClass('current-thumb');
            }

        };


        /* Place Slide
         ----------------------------*/
        base._placeSlide = function(place){

            // If links should open in new window
            var linkTarget = base.options.new_window ? ' target="_blank"' : '';

            loadSlide = false;

            if (place == 'next'){

                vars.current_slide == base.options.slides.length - 1 ? loadSlide = 0 : loadSlide = vars.current_slide + 1;	// Determine next slide

                var targetList = base.el+' li:eq('+loadSlide+')';

                if (!$(targetList).html()){
                    // If links should open in new window
                    var linkTarget = base.options.new_window ? ' target="_blank"' : '';

                    imageLink = (base.options.slides[loadSlide].url) ? "href='" + base.options.slides[loadSlide].url + "'" : "";	// If link exists, build it
                    var img = $('<img src="'+base.options.slides[loadSlide].image+'"/>');

                    img.appendTo(targetList).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading').css('visibility','hidden');

                    img.load(function(){
                        base._origDim($(this));
                        base.resizeNow();
                    });	// End Load
                };

                base.nextSlide();

            }else if (place == 'prev'){

                vars.current_slide - 1 < 0  ? loadSlide = base.options.slides.length - 1 : loadSlide = vars.current_slide - 1;	// Determine next slide

                var targetList = base.el+' li:eq('+loadSlide+')';

                if (!$(targetList).html()){
                    // If links should open in new window
                    var linkTarget = base.options.new_window ? ' target="_blank"' : '';

                    imageLink = (base.options.slides[loadSlide].url) ? "href='" + base.options.slides[loadSlide].url + "'" : "";	// If link exists, build it
                    var img = $('<img src="'+base.options.slides[loadSlide].image+'"/>');

                    img.appendTo(targetList).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading').css('visibility','hidden');

                    img.load(function(){
                        base._origDim($(this));
                        base.resizeNow();
                    });	// End Load
                };
                base.prevSlide();
            }

        };


        /* Get Original Dimensions
         ----------------------------*/
        base._origDim = function(targetSlide){
            targetSlide.data('origWidth', targetSlide.width()).data('origHeight', targetSlide.height());
        };


        /* After Slide Animation
         ----------------------------*/
        base.afterAnimation = function(){

            // If hybrid mode is on swap back to higher image quality
            if (base.options.performance == 1){
                base.$el.removeClass('speed').addClass('quality');
            }

            // Update previous slide
            if (vars.update_images){
                vars.current_slide - 1 < 0  ? setPrev = base.options.slides.length - 1 : setPrev = vars.current_slide-1;
                vars.update_images = false;
                $('.prevslide').removeClass('prevslide');
                $(base.el+' li:eq('+setPrev+')').addClass('prevslide');
            }

            vars.in_animation = false;

            // Resume slideshow
            if (!vars.is_paused && base.options.slideshow){
                vars.slideshow_interval = setInterval(base.nextSlide, base.options.slide_interval);
                if (base.options.stop_loop && vars.current_slide == base.options.slides.length - 1 ) base.playToggle();
            }

            // Call theme function for after slide transition
            if (typeof theme != 'undefined' && typeof theme.afterAnimation == "function" ) theme.afterAnimation();

            return false;

        };

        base.getField = function(field){
            return base.options.slides[vars.current_slide][field];
        };

        // Make it go!
        base.init();
    };


    /* Global Variables
     ----------------------------*/
    $.supersized.vars = {

        // Elements
        thumb_tray			:	'#thumb-tray',	// Thumbnail tray
        thumb_list			:	'#thumb-list',	// Thumbnail list
        slide_list          :   '#slide-list',	// Slide link list

        // Internal variables
        current_slide			:	0,			// Current slide number
        in_animation 			:	false,		// Prevents animations from stacking
        is_paused 				: 	false,		// Tracks paused on/off
        hover_pause				:	false,		// If slideshow is paused from hover
        slideshow_interval		:	false,		// Stores slideshow timer
        update_images 			: 	false,		// Trigger to update images after slide jump
        options					:	{}			// Stores assembled options list

    };


    /* Default Options
     ----------------------------*/
    $.supersized.defaultOptions = {

        // Functionality
        slideshow               :   1,			// Slideshow on/off
        autoplay				:	0,			// Slideshow starts playing automatically
        start_slide             :   1,			// Start slide (0 is random)
        stop_loop				:	0,			// Stops slideshow on last slide
        random					: 	0,			// Randomize slide order (Ignores start slide)
        slide_interval          :   5000,		// Length between transitions
        transition              :   1, 			// 0-None, 1-Fade, 2-Slide Top, 3-Slide Right, 4-Slide Bottom, 5-Slide Left, 6-Carousel Right, 7-Carousel Left
        transition_speed		:	750,		// Speed of transition
        new_window				:	1,			// Image links open in new window/tab
        pause_hover             :   0,			// Pause slideshow on hover
        keyboard_nav            :   1,			// Keyboard navigation on/off
        performance				:	1,			// 0-Normal, 1-Hybrid speed/quality, 2-Optimizes image quality, 3-Optimizes transition speed //  (Only works for Firefox/IE, not Webkit)
        image_protect			:	1,			// Disables image dragging and right click with Javascript

        // Size & Position
        fit_always				:	0,			// Image will never exceed browser width or height (Ignores min. dimensions)
        fit_landscape			:   0,			// Landscape images will not exceed browser width
        fit_portrait         	:   1,			// Portrait images will not exceed browser height
        min_width		        :   0,			// Min width allowed (in pixels)
        min_height		        :   0,			// Min height allowed (in pixels)
        horizontal_center       :   1,			// Horizontally center background
        vertical_center         :   1,			// Vertically center background


        // Components
        slide_links				:	"name",			// Individual links for each slide (Options: false, 'num', 'name', 'blank')
        thumb_links				:	1,			// Individual thumb links for each slide
        thumbnail_navigation    :   0			// Thumbnail navigation

    };

    $.fn.supersized = function(options){
        return this.each(function(){
            (new $.supersized(options));
        });
    };

})(jQuery);

